﻿using System;
using System.Linq;
using System.Web.Mvc;
using System.Web.Security;
using Dogshow.BusinessLogic.Managers;
using Dogshow.Infrastructure.Exceptions;
using Dogshow.Web.Models;
using Dogshow.Web.ViewModels.RegistracijaNaloga;

namespace Dogshow.Web.Controllers
{
    public class RegistracijaNalogaController : Controller
    {
        private readonly RegistracijaNalogaManager m_RegistracijaNalogaManager;

        public RegistracijaNalogaController(RegistracijaNalogaManager registracijaNalogaManager)
        {
            m_RegistracijaNalogaManager = registracijaNalogaManager;
        }

        public ActionResult Index()
        {
            return View(new RegistracijaNalogaViewModel());
        }

        [HttpPost]
        public ActionResult KreirajNalog(RegistracijaNalogaViewModel registracija)
        {
            if (!ModelState.IsValid)
            {
                return View("Index", registracija);
            }
            try
            {
                m_RegistracijaNalogaManager.RegistrujKorisnika(registracija.KorisnickoIme, registracija.ImeIPrezime, 
                    registracija.Lozinka, registracija.Adresa, registracija.Mesto, registracija.Telefon, registracija.Email);
                var webUser = new Korisnik
                {
                    KorisnickoIme = registracija.KorisnickoIme,
                    ImeIPrezime = registracija.KorisnickoIme,
                    VrstaNaloga = VrsteKorisnika.Korisnik
                };
                var cookie = FormsAuthentication.GetAuthCookie(registracija.KorisnickoIme, false);
                var ticket = new FormsAuthenticationTicket(1, registracija.KorisnickoIme, DateTime.Now,
                                                           DateTime.Now.AddMonths(6),
                                                           false, webUser.ToString());

                cookie.Value = FormsAuthentication.Encrypt(ticket);
                Response.Cookies.Add(cookie);
                return RedirectToAction("Index", "Home");
            }
            catch (KorisnikPostojiException exc)
            {
                ModelState.AddModelError("KorisnickoIme", exc.Message);
                return View("Index", registracija);
            }
        }

        public JsonResult Mesta()
        {
            var mesta = m_RegistracijaNalogaManager.VratiMesta().Select(x => "(" + x.PostanskiBroj + ") " + x.Naziv);
            return Json(mesta, JsonRequestBehavior.AllowGet);
        }

    }
}
